package com.nextel.project.cobranza.rms;

import com.nextel.project.Configuracion;
import com.nextel.project.usuario.bean.GeneralBean;
import com.nextel.project.util.BuscarListener;
import pe.com.nextel.rms.GestorRMS;
import pe.com.nextel.rms.Persistente;
import java.util.Stack;
import javax.microedition.rms.RecordEnumeration;
import pe.com.nextel.util.ArrayList;
import pe.com.nextel.util.Iterator;
import pe.com.nextel.util.List;

/**
 *
 * @author eespinoza
 */
public class RMSBanco extends GestorRMS {
    
    private GeneralBean beanGeneral = new GeneralBean();
    
    
    public RMSBanco() {
        super("RMS_BANCO");
    }
    
    protected Persistente createObjectBean() {
        return beanGeneral;
    }
    
    public void grabarBanco(Stack objectStack) throws Exception {
//        System.out.println("RMSBanco.grabarBanco");
        try {
            
            abrirRS();
            
            Object obj;
            GeneralBean beanTemp;
            int i = 0;
            List lista = new ArrayList();
            //mientras haya datos en la pila
            while ((obj = objectStack.pop()) != null) {
                
                beanTemp = (GeneralBean) obj;
                if (i % Configuracion.RMS_CANTREG == 0 && !lista.isEmpty()) {
                    
                    guardar(lista);
                    
                    lista.clear();
                    System.gc();
                }
                lista.add(beanTemp);
                i++;
                               
                
            }
            
            if (!lista.isEmpty()) {
                guardar(lista);
                lista.clear();
                System.gc();
            }
            lista = null;
        } finally {
            cerrarRS();
        }
    }
    
    public void obtenerIncremental(BuscarListener listener) throws Exception {
        System.out.println("RMSBanco.obtenerIncremental");
         RecordEnumeration en = null;
        try {
            
            abrirRS();
            
              en = enumerateRecords();
            
            List lista = new ArrayList();
            
            int i = 0;
            
            while (en.hasNextElement() && !listener.esFinalizadaBusqueda( )) {
                
                int id = en.nextRecordId();
                Iterator it = getRecordList(id).iterator();
          
                while ( it.hasNext() && !listener.esFinalizadaBusqueda( )) {
               
                    GeneralBean bean = (GeneralBean) it.next();
                    lista.add(bean);
                    i++; 
                        
                    if ((i % 5 == 0) && !lista.isEmpty()) {     
                        listener.agregarElementosVectorDatos(lista);
                        lista.clear();
                    }
                }
                
                if (!lista.isEmpty()) {
                    listener.agregarElementosVectorDatos(lista);
                    lista.clear();
                }
            }
           
            listener.finalizo();
            
            lista = null;
            
            System.gc();
            
        } finally {

            if(en != null){
                en.destroy();
                en=null;
            }

            cerrarRS();
        }
    }
    
    
}
